package com.ssy.lingxi.platform.manage.controller.content;

import com.ssy.lingxi.common.controller.BaseController;
import com.ssy.lingxi.common.model.vo.PageVO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.platform.manage.entity.content.ContentInformation;
import com.ssy.lingxi.platform.manage.model.request.common.*;
import com.ssy.lingxi.platform.manage.model.request.content.*;
import com.ssy.lingxi.platform.manage.model.response.*;
import com.ssy.lingxi.platform.manage.service.content.IContentInformationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;

/**
 * @author fhj
 * @version 2.0.0
 * @menu 内容管理 - 资讯管理
 * @date 2020/9/18
 */
@Api(tags = "内容管理 - 资讯管理")
@RestController
@RequestMapping("/manage/contentInformation")
public class ContentInformationController extends BaseController {

    @Resource
    private IContentInformationService contentInformationService;

    /**
     * 列表
     * @param request 请求参数
     * @return 操作结果
     */
    @ApiOperation(value = "列表")
    @GetMapping("/page")
    public Wrapper<PageData<ContentInformationPageResponse>> page(@Valid ContentInformationPageRequest request) {
        return contentInformationService.page(request);
    }
    /**
     * 详情
     * @param request 请求参数
     * @return 操作结果
     */
    @GetMapping(value = "/get")
    public Wrapper<ContentInformation> get(@Validated CommonIdRequest request) {
        return contentInformationService.get(request);
    }
    /**
     * 新增
     * @param request 请求参数
     * @return 操作结果
     */
    @PostMapping(value = "/add")
    public Wrapper<Void> add(@RequestBody @Validated({ContentInformationRequest.Add.class}) ContentInformationRequest request) {
        return contentInformationService.add(request, getSysUser());
    }
    /**
     * 修改
     * @param request 请求参数
     * @return 操作结果
     */
    @PostMapping(value = "/update")
    public Wrapper<Void> update(@RequestBody @Validated({ContentInformationRequest.Update.class}) ContentInformationRequest request) {
        return contentInformationService.update(request, getSysUser());
    }
    /**
     * 上架/下架
     * @param request 请求参数
     * @return 操作结果
     */
    @PostMapping(value = "/updateStatus")
    public Wrapper<Void> updateStatus(@RequestBody @Validated({CommonStatusRequest.Shelf.class}) CommonStatusRequest request) {
        return contentInformationService.updateStatus(request, getSysUser());
    }
    /**
     * 删除
     * @param request 请求参数
     * @return 操作结果
     */
    @ApiOperation(value = "")
    @PostMapping(value = "/delete")
    public Wrapper<Void> delete(@RequestBody @Validated CommonIdRequest request) {
        return contentInformationService.delete(request, getSysUser());
    }
    /**
     * 批量删除/上架/下架
     * @param request 请求参数
     * @return 操作结果
     */
    @PostMapping(value = "/batch")
    public Wrapper<Void> batch(@RequestBody @Validated ContentInformationBatchRequest request) {
        return contentInformationService.batch(request, getSysUser());
    }
    /**
     * 根据推荐标签获取
     * @param request 请求参数
     * @return 操作结果
     */
    @ApiOperation(value = "")
    @GetMapping(value = "/findAllByRecommendLabel")
    public Wrapper<List<ContentInformationResponse>> findAllByRecommendLabel(@Valid RecommendLabelRequest request) {
        return contentInformationService.findAllByRecommendLabel(request);
    }
    /**
     * 最新发布
     * @return 操作结果
     */
    @ApiOperation(value = "")
    @GetMapping(value = "/latest")
    public Wrapper<List<ContentInformationResponse>> latest() {
        return contentInformationService.latest();
    }

    /**
     * 最多阅读
     * @return 操作结果
     */
    @ApiOperation(value = "")
    @GetMapping(value = "/maximumRead")
    public Wrapper<List<ContentInformationResponse>> maximumRead() {
        return contentInformationService.maximumRead();
    }
    /**
     * 最多收藏
     * @return 操作结果
     */
    @GetMapping(value = "/maximumCollect")
    public Wrapper<List<ContentInformationResponse>> maximumCollect() {
        return contentInformationService.maximumCollect();
    }

    /**
     * 根据分类获取
     * @param request 请求参数
     * @return 操作结果
     */
    @GetMapping(value = "/findAllByCategory")
    public Wrapper<List<InformationColumnResponse>> findAllByCategory(@Valid CommonIdRequest request) {
        return contentInformationService.findAllByCategory(request);
    }

    /**
     * 根据栏目获取
     * @param request 请求参数
     * @return 操作结果
     */
    @GetMapping(value = "/pageByColumnLabel")
    public Wrapper<PageData<ContentInformationResponse>> pageByColumnLabel(@Valid CommonIdPageRequest request) {
        return contentInformationService.pageByColumnLabel(request);
    }
    /**
     * 资讯栏目
     * @return 操作结果
     */
    @GetMapping(value = "/informationColumn")
    public Wrapper<List<InformationColumnResponse>> informationColumn() {
        return contentInformationService.informationColumn();
    }
    /**
     * 搜索
     * @param request 请求参数
     * @return 操作结果
     */
    @GetMapping("/search")
    public Wrapper<PageData<ContentInformationResponse>> search(@Valid ContentInformationSearchRequest request) {
        return contentInformationService.search(request);
    }

    /**
     * 根据ID获取
     * @param request 请求参数
     * @return 操作结果
     */
    @GetMapping(value = "/findById")
    public Wrapper<ContentInformationResponse> findById(@Valid CommonIdRequest request) {
        return contentInformationService.findById(request, isLogin() ? getSysUser() : null);
    }
    /**
     * 根据ID集合获取
     * @param request 请求参数
     * @return 操作结果
     */
    @GetMapping(value = "/findByIdIn")
    public Wrapper<List<ContentInformationListResponse>> findByIdIn(@Valid CommonIdListRequest request) {
        return contentInformationService.findByIdIn(request);
    }
    /**
     * 同类资讯
     * @param request 请求参数
     * @return 操作结果
     */
    @GetMapping(value = "/related")
    public Wrapper<List<ContentInformationResponse>> related(@Valid CommonIdRequest request) {
        return contentInformationService.related(request);
    }
    /**
     * 收藏/取消收藏
     * @param request 请求参数
     * @return 操作结果
     */
    @PostMapping(value = "/collect")
    public Wrapper<Void> collect(@RequestBody @Validated CollectRequest request) {
        return contentInformationService.collect(request, getSysUser());
    }
    /**
     * 收藏列表
     * @param request 请求参数
     * @return 操作结果
     */
    @GetMapping(value = "/collectList")
    public Wrapper<PageData<ContentInformationResponse>> collectList(PageVO request) {
        return contentInformationService.collectList(request, getSysUser());
    }
    /**
     * 列表（装修）
     * @param request 请求参数
     * @return 操作结果
     */
    @GetMapping("/listAdorn")
    public Wrapper<PageData<ContentInformationListAdornResponse>> listAdorn(@Valid ContentInformationListAdornRequest request) {
        return contentInformationService.listAdorn(request);
    }
    /**
     * 根据不包含的资讯ID分页获取资讯列表
     * @param request 请求参数
     * @return 操作结果
     */
    @GetMapping("/pageByIdNotIn")
    public Wrapper<PageData<ContentInformationResponse>> pageByIdNotIn(CommonIdListPageRequest request) {
        return contentInformationService.pageByIdNotIn(request);
    }
    /**
     * 根据包含的资讯ID分页获取资讯列表
     * @param request 请求参数
     * @return 操作结果
     */
    @GetMapping("/pageByIdIn")
    public Wrapper<PageData<ContentInformationResponse>> pageByIdIn(CommonIdListPageRequest request) {
        return contentInformationService.pageByIdIn(request);
    }
}
